Function.prototype.inherits = function (parent)
{
    this.prototype = new parent();
    var d = {}, p = this.prototype;
    this.prototype.constructor = parent;
    this.prototype.super = function (name)
    {
        if (!(name in d))
        {
            d[name] = 0;
        }
        var f, r, t = d[name], v = parent.prototype;
        if (t)
        {
            while (t)
            {
                v = v.constructor.prototype;
                t -= 1;
            }
            f = v[name];
        } else
        {
            f = p[name];
            if (f == this[name])
            {
                f = v[name];
            }
        }
        d[name] += 1;
        r = f.apply(this, Array.prototype.slice.apply(arguments, [1]));
        d[name] -= 1;
        return r;
    };

    return this;
}


